home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / dsp / fteyaltr.z / fteyaltr / fftsubs.h < prev    next >
C/C++ Source or Header  |  1991-08-31  |  2KB  |  101 lines

  1. /* ------------------------- fftsubs.h -------------------------------- */
  2. /*                                    */
  3. /* Author:    Eyal Lebedinsky                        */
  4. /* Date:    May 1990                        */
  5. /* Version:    9 June 1991                        */
  6. /*                                    */
  7. /* used by the output of fftgc                        */
  8. /*                                    */
  9. /* This program is released into the public domain.            */
  10. /*                                    */
  11. /*----------------------------------------------------------------------*/
  12.  
  13. #define mulf(x,y) (((long)(int)(x) * (long)(int)(y)) >> 16)
  14.  
  15. extern short x[], qf[];
  16.  
  17. #define init \
  18.     register short t1,t2,t3,t4,t5,t6,tt;\
  19.     register long lt1,lt2;
  20.  
  21. #define _fft1(i) \
  22.     x[i] >>= 1;
  23.  
  24. #define _fft2(i0,i1) \
  25.     t1 = x[i0] >> 1;\
  26.     t2 = x[i1] >> 1;\
  27.     tt = t1; tt += t2; x[i0] = tt;\
  28.     t1 -= t2; x[i1] = t1;
  29.  
  30. #define _fft3(i1,i3,i4) \
  31.     t1 = x[i1] >> 1;\
  32.     t3 = x[i3] >> 1;\
  33.     t4 = x[i4] >> 1;\
  34.     tt = t4; tt += t3; tt >>= 1;\
  35.     t4 -= t3; t4 >>= 1; x[i4] = t4;\
  36.     t3 = t1; t3 -= tt; x[i3] = t3;\
  37.     t1 += tt; x[i1] = t1;
  38.  
  39. #define _fft4(i1,i2,i3,i4,cc1) \
  40.     t1 = x[i1] >> 2;\
  41.     t2 = x[i2] >> 1;\
  42.     t3 = mulf (x[i3], cc1);\
  43.     t4 = mulf (x[i4], cc1);\
  44.     tt = t3; t3 -= t4; t4 += tt;\
  45.     tt = t2; tt -= t4; x[i4] = tt;\
  46.     t2 += t4; x[i3] = -t2;\
  47.     tt = t1; tt -= t3; x[i2] = tt;\
  48.     t1 += t3; x[i1] =  t1;
  49.  
  50. #define _fft5(i1,i2,i3,i4,i5,i6,i7,i8,sm1,sp1,cc1,sm3,sp3,cc3,ind) \
  51.     t5 = x[i7];\
  52.     t1 = mulf (t5, sm1);\
  53.     t6 = x[i3];\
  54.     if (ind)\
  55.         t6 >>= 1;\
  56.     t5 += t6;\
  57.     t2 = mulf (t6, sp1);\
  58.     t5 = mulf (t5, cc1);\
  59.     t1 += t5;\
  60.     t2 += t5;\
  61. \
  62.     t5 = x[i8];\
  63.     t3 = mulf (t5, sm3);\
  64.     t6 = x[i4];\
  65.     if (ind)\
  66.         t6 >>= 1;\
  67.     t5 += t6;\
  68.     t4 = mulf (t6, sp3);\
  69.     t5 = mulf (t5, cc3);\
  70.     t3 += t5;\
  71.     t4 += t5;\
  72. \
  73.     t5 = t3; t5 -= t1;\
  74.     t6 = x[i2] >> 1;\
  75.     tt = t5; tt -= t6; x[i7] = tt;\
  76.              t5 += t6; x[i4] = t5;\
  77.     t5 = t2; t5 += t4;\
  78.     t6 = x[i6] >> 1;\
  79.     tt = t5; tt -= t6; x[i3] = tt;\
  80.              t5 += t6; x[i8] = t5;\
  81.     t5 = t1; t5 += t3;\
  82.     t6 = x[i1] >> 1;\
  83.     tt = t6; tt -= t5; x[i6] = tt;\
  84.              t5 += t6; x[i1] = t5;\
  85.     t5 = t2; t5 -= t4;\
  86.     t6 = x[i5] >> 1;\
  87.     tt = t6; tt -= t5; x[i5] = tt;\
  88.              t6 += t5; x[i2] = t6;
  89.  
  90. #define _fft7(i1,i2) \
  91.     lt1 = x[i2];\
  92.     lt1 *= lt1;\
  93.     qf[i1] = lt1 >> 16;
  94.  
  95. #define _fft8(i1,i2,i3) \
  96.     lt1 = x[i2];\
  97.     lt1 *= lt1;\
  98.     lt2 = x[i3];\
  99.     lt2 *= lt2;\
  100.     lt1 += lt2; qf[i1] = lt1 >> 16;
  101.